package br.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import br.modelo.Usuario;

public class UsuarioDAOHibernate implements UsuarioDAO{
private Session sessao;

	@Override
	public void salvar(Usuario usuario) {
		this.sessao.save(usuario);

	}
	
	@Override
	public void excluir(Usuario usuario) {
		this.sessao.delete(usuario);

	}
	
	@Override
	public void alterar(Usuario usuario) {
		this.sessao.update(usuario);
	}
	
	@Override
	public Usuario pesquisarPorCodigo(Integer id) {
		
		return (Usuario) this.sessao.get(Usuario.class, id);
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> listarSubCoord() {
		Criteria lista = sessao.createCriteria(Usuario.class);
			lista .add(Restrictions.eq("nivel", 3));
		return lista.list();
	}

	
	@Override
	public Usuario buscaLogin(String login) {
		String sql = "from Usuario u where u.login =  :login";
		Query consulta = this.sessao.createQuery(sql);
		consulta.setString("login",login);
				
		return (Usuario) consulta.uniqueResult();
	}
	
	
	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> listarCoord() {
		Criteria lista = sessao.createCriteria(Usuario.class);
			lista .add(Restrictions.eq("nivel", 2));
		return lista.list();
	
	}
	

	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> listarAdm() {
		Criteria lista = sessao.createCriteria(Usuario.class);
			lista .add(Restrictions.eq("nivel", 1));
		return lista.list();
	
	}

	
	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> listar() {
		Criteria lista = sessao.createCriteria(Usuario.class);
			
		return lista.list();
	
	}

	
	// GET e SET
	public Session getSessao() {
		return sessao;
	}

	public void setSessao(Session sessao) {
		this.sessao = sessao;
	}
	

}
